package fi.uba.algocontrol.observer;

import fi.uba.algocontrol.controller.AvionController;
import fi.uba.algocontrol.model.Mapa;
import fi.uba.algocontrol.model.aviones.Avion;
import fi.uba.algocontrol.model.niveles.NivelManager;
import fi.uba.algocontrol.observer.avion.AterrizajesManager;
import fi.uba.algocontrol.observer.avion.AvionCollector;
import fi.uba.algocontrol.view.AvionView;
import fi.uba.algocontrol.view.JuegoView;
import fi.uba.algocontrol.view.factory.AvionViewFactory;
import fiuba.algo3.titiritero.modelo.GameLoop;

public class AvionObserver extends AbstractObserver
{
    private int time = 0;
    private AvionViewFactory avionViewFactory;

    public AvionObserver(GameLoop gameLoop, Mapa mapa, JuegoView juegoView, AvionController avionController ) {
        super(gameLoop, mapa, juegoView);
        this.avionViewFactory = new AvionViewFactory(avionController);
    }

    public void notificarCicloFinalizado()
    {
        if (this.time < NivelManager.getInstance().getNivelActual().getDificultad().getIntervaloAparicion())
            this.time += this.gameLoop.getFrecuencia();
        else
        {

            this.time = 0;
            try
            {
                AvionView avionView = this.avionViewFactory.crearAvion();
                this.juegoView.agregar(avionView);

                this.gameLoop.agregar((Avion) avionView.getPosicionable()); //Agrego avion "vivo" al gameloop
                this.mapa.agregar((Avion) avionView.getPosicionable()); //Agrego el modelo de avion al mapa

                //Hago una limpieza de aviones del mapa
                AvionCollector.collect(this.juegoView.getAvionesView(), this.gameLoop, this.mapa);


            }catch (Exception e)
            {

            }

            //Manejo aterrizajes
            AterrizajesManager.manage(this.juegoView.getAvionesView(), this.gameLoop, this.mapa);


        }
    }


}
